package domain;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.logging.Logger;

import sun.security.pkcs11.Secmod.Module;


/**
 * Die Klasse Studiengang enthält eine Liste mit Modulen, so dass bekannt ist, welche Module in einem Studiengang stattfinden. 
 * Alle Studiengaenge der Universiät Vawistadt koennen durch die Instanzen dieser Klasse repraesentiert werden. 
 * 
 * @author Lena Schenk
 * @version 14122014
 */
public class Studiengang
{
    
//"Mathematik 1";"Wirtschaftsinformatik 1";"Programmierung";"Modelle der Informatik"
//"Mathematik 2";"Softwareentwicklung und -Programmierung";"Datenbankmanagementsysteme";"Software Engineering 1"

    /**
     * Names des Studiengangs
     */
    private String  name;
    
    /**
     * Alle Module fuer den  Studiengang
     */
    private List<Modul> module = null;
    
    private UUID Id ;
    
    /**
     * Die Konstruktormethode weisst dem Studiengang-Objekt einen Namen zu. Das Instanzobjekt Modulliste wird als leere Liste instanziiert.
     * 
     * @param    name  Name des Studiengangs
     */
    public Studiengang(String name, List<Modul> iModule) {
        this.name = name;
        this.module = iModule; 
    	this.Id = UUID.randomUUID();
    }

   /**
    * @return      Die Methode gibt den Namen des Studiengangs als String zurueck
    * 
    */
    public String getName() {
        return name;
    }
    
    /**
     * Die Methode setzt den Namen des Studiengangs neu 
     * @param    name   neuer Name des Studiengangs
     */
    public void setName(String name) {
        this.name = name;
    }
    
    /**
     * @ return    Die Methode gibt die private Instanzvariable Modul zurueck
     */
    public List<Modul> getModule() {
        return module;
    }
    
    /**
     * Die Methode setzt eine neue Modulliste 
     * 
     * @param module Liste der Module.
     */

    public void setModule(List<Modul> module) {
        this.module = module;
    }
/**
 * toString Methode gibt die grundlegenden Infos zum Studiengang-Objekt aus 
 */
    @Override
	public String toString() {
		return this.name + " Module [modul=" + module.toString() + "]";
    }
    

    public int getModuleSemester(String moduleName){
    	Optional<Modul> iModule = module.stream().filter(x->x.getName().equals(moduleName)).findFirst();
    	
    	if(iModule.isPresent()){
    		return iModule.get().getSemester();
    	}else{
    		return -1;
    	}
    }
    
   
}
